package Proyecto2;

import java.awt.Point;


public abstract class NaveJugador extends Dibujable{
	protected int velocidad;
	protected int ataque;
	protected int misCorazones;
	protected int cantGolpesRecibidos;
	protected int velocidadMax;
	protected int ataqueMax;
	protected int cantMaxCorazones;
	protected int puntaje;
	protected ArmaJugador arma;
	protected boolean vivo;
	protected Nivel MiNivel;
	
	public NaveJugador(int vel, int at, ArmaJugador a, Nivel n){
		puntaje=0;
		vivo=true;
		velocidad= vel;
		ataque= at;
		arma= a;
		misCorazones= 3;
		MiNivel=n;
		cantGolpesRecibidos=0;
	}
	
	public abstract void Atacar(); 
	
	public void serAtacado(){
		cantGolpesRecibidos++;
		if(cantGolpesRecibidos==misCorazones){
			vivo=false;
		}
	}
	
	public boolean vive(){
		return vivo;
	}
	
	public void setPuntaje(int p){
		puntaje+=p;
	}
	
	public void Mover(int i){
		switch(i) {
		case 1: {
			MoverArriba();

			break;
		}
		case 2: {
			MoverAbajo();
			
			break;
		}
		case 3: {
			MoverIzquierda();

			break;
		}
		case 4: {
			MoverDerecha();	

			break;
		}
	}
	}
	
	private void MoverDerecha(){
		int x=this.getX()+velocidad;
		if(x<MiNivel.juego.getWidth()-(this.getWidth()/2))
			this.setLocation(x, this.getY());
	}
	
	private void MoverIzquierda(){
		int x= this.getX()-velocidad;
		if(x>0-(this.getWidth()/2))
			this.setLocation(x, this.getY());
	}
	
	private void MoverArriba(){
		int y=this.getY()-velocidad;
		if(y>(MiNivel.juego.getHeight()/2))
			this.setLocation(this.getX(), y);
	}
	
	private void MoverAbajo(){
		int y=this.getY()+velocidad;
		if(y<MiNivel.juego.getHeight()-this.getHeight()-35)
			this.setLocation(this.getX(), y);
	}
	
	public int obtenerPuntaje(){
		return puntaje;
	}
	
	public ArmaJugador obtenerArmaJugador(){
		return arma;
	}
	
	public void setAtaque(int a){
		ataque+=a;
	}
	
	protected void Colisiones(){
		Point l= arma.getLocation();
		Point n;
		if(vive() && arma.isVisible()){
			for (NaveEnemiga Nave : MiNivel.obtenerNavesEnemigas()) {
				if(Nave.isVisible()){
					n= Nave.getLocation();
					boolean morira= (l.getX()>=n.getX()) && (l.getX()<= n.getX()+ Nave.getWidth()) && n.getY()>=15;
					if (morira ){
						int puntos= Nave.serAtacado();
						setPuntaje(puntos);
						MiNivel.juego.jLabelPuntos.setText(" "+ obtenerPuntaje());				 
					}
				}
			}
		}
	}
	
}